home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / CHIP Haziran 2001.iso / prog / haziran / 19 / setup.exe / data.z / pci_dump.c < prev    next >
C/C++ Source or Header  |  2001-04-11  |  2KB  |  80 lines

  1. ////////////////////////////////////////////////////////////////
  2. // File - PCI_DUMP.C
  3. //
  4. // A utility for getting a dump of all the PCI configuration
  5. // registers of the PCI cards installed.
  6. // 
  7. ////////////////////////////////////////////////////////////////
  8.  
  9. #include "../../include/windrvr.h"
  10. #include "../shared/pci_diag_lib.h"
  11. #include <stdio.h>
  12.  
  13. int main (int argc, char *argv[]) 
  14. {
  15.     HANDLE hWD;
  16.     char buf[256];
  17.     WORD wVendorID;
  18.     WORD wDeviceID;
  19.     WD_PCI_CONFIG_DUMP pciCnf;
  20.     int g;
  21.     
  22.     if (!PCI_Get_WD_handle(&hWD)) return 0;
  23.  
  24.     BZERO(pciCnf);
  25.     pciCnf.fIsRead = TRUE;
  26.     printf ("pci bus scan (using WD_PciConfigDump)\n");
  27.  
  28.     for (pciCnf.pciSlot.dwBus=0; pciCnf.pciSlot.dwBus<256; 
  29.             pciCnf.pciSlot.dwBus++)
  30.     {
  31.         for (pciCnf.pciSlot.dwSlot=0; pciCnf.pciSlot.dwSlot<32; 
  32.                 pciCnf.pciSlot.dwSlot++)
  33.         {
  34.             for (pciCnf.pciSlot.dwFunction=0; pciCnf.pciSlot.dwFunction<8; 
  35.                     pciCnf.pciSlot.dwFunction++)
  36.             {
  37.                 CHAR tmp[200];
  38.                 wVendorID = 0xffff;
  39.                 pciCnf.pBuffer = &wVendorID;
  40.                 pciCnf.dwBytes = sizeof(wVendorID);
  41.                 pciCnf.dwOffset = 0;
  42.                 WD_PciConfigDump(hWD,&pciCnf);
  43.                 if (wVendorID==0xffff)
  44.                 {
  45.                     if (pciCnf.pciSlot.dwFunction==0)
  46.                         break;      // skip slot
  47.                     else
  48.                         continue; // skip function
  49.                 }
  50.                  pciCnf.pBuffer = &wDeviceID;
  51.                 pciCnf.dwBytes = sizeof(wDeviceID);
  52.                 pciCnf.dwOffset = 2;
  53.                 WD_PciConfigDump(hWD,&pciCnf);
  54.                   pciCnf.pBuffer = buf;
  55.                 pciCnf.dwBytes = sizeof(buf);
  56.                 pciCnf.dwOffset = 0;
  57.                 WD_PciConfigDump(hWD,&pciCnf);
  58.                    
  59.                 printf("Bus %d Slot %d Function %d, VendorID %04x DeviceID %04x\n",
  60.                     pciCnf.pciSlot.dwBus, pciCnf.pciSlot.dwSlot, pciCnf.pciSlot.dwFunction, wVendorID, wDeviceID);
  61.                 for (g=0; g<256; g+=4)
  62.                 {
  63.                     if ((g/4) %    8 == 0) printf("%2x ",g);
  64.                     printf ("%08x ",*((DWORD *) (buf+g)));
  65.                     if ((g/4) %    8 == 7) printf("\n");
  66.                 }
  67.  
  68.                 PCI_Print_card_info(pciCnf.pciSlot);
  69.                 printf("Press Enter to continue to next slot\n");
  70.                 fgets(tmp, sizeof(tmp), stdin);
  71.             }
  72.         }
  73.     }
  74.  
  75.     WD_Close(hWD);
  76.  
  77.     return 0;
  78. }
  79.  
  80.